package com.skytech.component.crawler.scratch.chrome;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;


@Service
public class TestChromeService {
    @Value("${chrome.driver.path}")
    public String driverPath;

    public TestChromeService() {
    }

    public List<String> testChromeDriver() {
        System.setProperty("webdriver.chrome.driver", driverPath);//chromedriver服务地址
        List<WebElement> webElementList = new LinkedList<>();
        WebDriver driver = new ChromeDriver(); //新建一个WebDriver 的对象，但是new 的是FirefoxDriver的驱动
        driver.manage().window().maximize();
        driver.get("http://hjbh.tj.gov.cn/news/notice/");//打开指定的网站
       /* driver.findElement(By.id("kw")).sendKeys(new  String[] {"hello"});//找到kw元素的id，然后输入hello
        driver.findElement(By.id("su")).click(); //点击按扭*//*
        // driver.navigate().refresh();*/
        try {
            /**
             * WebDriver自带了一个智能等待的方法。
             dr.manage().timeouts().implicitlyWait(arg0, arg1）；
             Arg0：等待的时间长度，int 类型 ；
             Arg1：等待时间的单位 TimeUnit.SECONDS 一般用秒作为单位。
             */
            driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

        } catch (Exception e) {
            e.printStackTrace();
        }

        List<String> resultList = new LinkedList<>();


         // System.out.println(driver.getPageSource());
          //  driver.getCurrentUrl();
       for(int i=0;i<8;i++){
            try {
                //滚动加载下一页
                //find_element_by_link_text
                //By.cssSelector("a[target='_self']");
                driver.findElement(By.partialLinkText("下一页")).click();


                WebElement webElement = driver.findElement(By.xpath("/html"));
                System.out.println(webElement.getAttribute("outerHTML"));
                //等待页面动态加载完毕 todo 页面加载时间确定
                Thread.sleep(4000);
                driver.findElement(By.className("lb_border1")).findElements(By.tagName("a")).stream().forEach(item -> {
                    resultList.add(item.getAttribute("href"));//网页上的href连接地址
                    System.out.println(item.getText());

                });

                //driver.findElement(By.className("nolink")).getText();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
        /**
         * dr.quit()和dr.close()都可以退出浏览器,简单的说一下两者的区别：第一个close，
         * 如果打开了多个页面是关不干净的，它只关闭当前的一个页面。第二个quit，
         * 是退出了所有Webdriver所有的窗口，退的非常干净，所以推荐使用quit最为一个case退出的方法。
         */
        driver.quit();//退出浏览器
        System.out.println(webElementList);
        return resultList;
    }


    public String nextUrl(String url) {
        System.setProperty("webdriver.chrome.driver", driverPath);//chromedriver服务地址
        WebDriver driver = new ChromeDriver(); //新建一个WebDriver 的对象，但是new 的是FirefoxDriver的驱动
        driver.manage().window().maximize();
        driver.get(url);//打开指定的网站
        try {
            /**
             * WebDriver自带了一个智能等待的方法。
             dr.manage().timeouts().implicitlyWait(arg0, arg1）；
             Arg0：等待的时间长度，int 类型 ；
             Arg1：等待时间的单位 TimeUnit.SECONDS 一般用秒作为单位。
             */
            driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

        } catch (Exception e) {
            e.printStackTrace();
        }
        try {

            driver.findElement(By.partialLinkText("下一页")).click();
            Thread.sleep(4000);
        }catch (Exception e){
            e.printStackTrace();
        }
        String  nextUrl=driver.getCurrentUrl();
        driver.quit();
        return  nextUrl;
    }


    public String downloadUrl(String url){
        System.setProperty("webdriver.chrome.driver", driverPath);//chromedriver服务地址

        WebDriver driver = new ChromeDriver(); //新建一个WebDriver 的对象，但是new 的是FirefoxDriver的驱动
        driver.manage().window().maximize();
        driver.get(url);//打开指定的网站
        System.out.println("7654321");
       /* driver.findElement(By.id("kw")).sendKeys(new  String[] {"hello"});//找到kw元素的id，然后输入hello
        driver.findElement(By.id("su")).click(); //点击按扭*//*
        // driver.navigate().refresh();*/
        try {
            /**
             * WebDriver自带了一个智能等待的方法。
             dr.manage().timeouts().implicitlyWait(arg0, arg1）；
             Arg0：等待的时间长度，int 类型 ；
             Arg1：等待时间的单位 TimeUnit.SECONDS 一般用秒作为单位。
             */
            driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

        } catch (Exception e) {
            e.printStackTrace();
        }
        String html= driver.getPageSource();
        WebElement webElement = driver.findElement(By.xpath("/html"));
        String htmlTmp=webElement.getAttribute("outerHTML");
        driver.quit();
        return htmlTmp;
    }
}
